package com.css.zfzx.sjcj.common.spacedata.auth;

import com.alibaba.fastjson.JSONObject;
import com.css.bpm.platform.api.local.PlatformAPI;
import com.css.bpm.platform.org.role.repository.entity.RoleEntity;
import com.css.bpm.platform.utils.PlatformSessionUtils;
import com.css.zfzx.sjcj.common.utils.ServerUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Author leon
 * @Date: 2021/4/20 3:40 下午
 */
@Service
@PropertySource("classpath:platform-config.yml")
public class UserAuthService {
    @Value("${role.superCode}")
    private String superCode;
    @Value("${role.provinceCode}")
    private String provinceCode;
    @Value("${role.cityCode}")
    private String cityCode;
    @Value("${role.areaCode}")
    private String areaCode;


    public JSONObject getUserInfo() {
        JSONObject jsonObject = new JSONObject();

        String userId = PlatformSessionUtils.getUserId();
        List<RoleEntity> roles = PlatformAPI.getOrgAPI().getUserAPI().getRoles(userId);
        // 是否为超级管理员
        boolean containtRole = ServerUtil.isContaintRole(roles, superCode);
        // 是否为省级管理员
        boolean containtRolePro = ServerUtil.isContaintRole(roles, provinceCode);
        // 是否为市级管理员
        boolean containtRoleCity = ServerUtil.isContaintRole(roles, cityCode);
        // 是否为区级管理员
        boolean containtRoleArea = ServerUtil.isContaintRole(roles, areaCode);

        if (!containtRole) {
            // 如果都不是只能查看个人表单
            if (!containtRolePro && !containtRoleCity && !containtRoleArea) {
                jsonObject.put("userId", userId);
            }
            // 获取部门地区名称
            String divisionName = ServerUtil.getDivisionEntity().getDivisionName();
            // 省级管理员
            if (containtRolePro) {
                jsonObject.put("province", divisionName);
            }
            // 市级管理员
            if (containtRoleCity) {
                jsonObject.put("city", divisionName);
            }
            // 区级管理员
            if (containtRoleArea) {
                jsonObject.put("area", divisionName);
            }
        }
        return jsonObject;
    }
}
